﻿Модуль Доп. вопрос при регистрации для DLE 9.2

Аналог модуля "Защитный вопрос" от Хортицы
Модуль бесплатный повторяет функционал предоставленного к продаже! Отличия бесплатность и открытость!
Автор: DimKA (Dle.in.ua)
под версию DLE 8.2 модуль поправил Dr. Soft (dlepro.com)
полная адаптация модуля и инсталлятор под DLE 9.2 Yeti (dlepro.com)

Данная версия модуля будет работать только под DLE 9.2 и возможно выше.
Варианты установки:
Ручная: скопировать содержимое папки manual на сервер и выполнить все три пункта инсталяции описанные ниже
или Простая заменой уже отредактированных файлов: скопировать содержимое папки full на сервер с заменой и выполнить только пункты 1 и 3)

****пункт 1
запустить инсталлятор перейдя по адресу вашсайт/install_quest.php, а после инсталляции удалите этот файл

и только если возникнут какие-то проблемы с инсталлятором, исталлируем модуль вручную:

открываем engine/options.php
ищем:
==================
    $options['others'] = array(
==================
ниже добавляем
==================
array(
    'name'       => "Доп. вопрос при регистрации",
    'url'        => "$PHP_SELF?mod=quest",
    'descr'      => "Настройка Дополнительных вопросов при регистрации.",
    'image'    => "rules.png",
    'access' => $user_group[$member_id['user_group']]['admin_editusers'] 
   ),
==================
сохраняем закрываем.


Выполняем sql запрос (если необходимо меняем префикс dle на свой)

/*Table structure for table `dle_quest` */

DROP TABLE IF EXISTS `dle_quest`;

CREATE TABLE `dle_quest` (
  `id` int(8) NOT NULL auto_increment COMMENT 'айди',
  `quest` varchar(50) character set cp1251 NOT NULL COMMENT 'вопрос',
  `answer` varchar(50) character set cp1251 NOT NULL COMMENT 'ответ',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251;




****пункт 2
И так установка НЕ Лёгкая - ручная)):
открываем register.php
======
ищем (примерно 33-я строка):
======
function check_reg($name, $email, $password1, $password2, $sec_code = 1, $sec_code_session = 1)
=======
меняем:
=======
function check_reg($reg_quest, $quest_id, $name, $email, $password1, $password2, $sec_code = 1, $sec_code_session = 1)
-------End-----
Ищем (примерно 43-я строка):
==========
if( $name == "" ) $stop .= $lang['reg_err_7'];
==========
ниже  добавляем:
======start====
##register quest dle.in.ua and dlepro.com
$quest = $db->super_query("SELECT * from ". PREFIX ."_quest Where id='{$quest_id}'");
if ($quest_id <= '0' or !$quest['id']) die('Hatking attempt. ID not valid');
if(empty($reg_quest) or $reg_quest!=strtolower($quest['answer'])) $stop .=" Неверный ответ на доп. вопрос ";
##register quest
-------End-----
Далее ищем (после добавления предыдущих пунктов примерно 148-я строка):
===============
$name = $db->safesql( $parse->process( htmlspecialchars( trim( $_POST['name'] ) ) ) );
===============
и ниже добавляем:
===============
$reg_quest = $db->safesql($parse->process(htmlspecialchars(trim(strtolower($_POST['reg_quest'])))));
$quest_id = $db->safesql(intval($_POST['quest_id']));
-------End-----
ищем немного ниже (после добавления предыдущих пунктов примерно 156-я строка):
===============
$reg_error = check_reg( $name, $email, $password1, $password2, $sec_code, $sec_code_session );
===============
Меняем на:
===============
$reg_error = check_reg( $reg_quest, $quest_id, $name, $email, $password1, $password2, $sec_code, $sec_code_session );
-------End-----
еще ниже ищем (после добавления предыдущих пунктов примерно 169-я строка):
===============
$idlink = rawurlencode( base64_encode( $name . "||" . $email . "||" . md5( $password1 ) . "||" . md5( sha1( $name . $email . DBHOST . DBNAME . $config['key'] ) ) ) );
===============
меняем на: 
===============
$idlink = rawurlencode( base64_encode( $name . "||" . $email . "||" . md5( $password1 ) . "||" . md5( sha1( $name . $email . DBHOST . DBNAME . $config['key'] ) ) . "||" . $quest_id . "||" . $reg_quest ) );
===============
ищем (после добавления предыдущих пунктов примерно 187-я строка):
===============
$_REQUEST['id'] = rawurlencode( base64_encode( $name . "||" . $email . "||" . md5( $password1 ) . "||" . md5( sha1( $name . $email . DBHOST . DBNAME . $config['key'] ) ) ) );
===============
Меняем:
===============
$_REQUEST['id'] = rawurlencode( base64_encode( $name . "||" . $email . "||" . md5( $password1 ) . "||" . md5( sha1( $name . $email . DBHOST . DBNAME . $config['key'] ) ) . "||" . $quest_id . "||" . $reg_quest ) );
===============
ищем (после добавления предыдущих пунктов примерно 215-я строка):
===============
$tpl->set_block( "'\\[validation\\](.*?)\\[/validation\\]'si", "" );
$path = parse_url( $config['http_home_url'] );
===============
Ниже добавляем:
===============
$quest = $db->super_query( "SELECT * from ". PREFIX ."_quest order by rand() limit 1" );
$tpl->set( '{quest}', $quest['quest'] );
=====
Далее ищем (после добавления предыдущих пунктов примерно 260-я строка):
=====
<input name=\"submit_reg\" type=\"hidden\" id=\"submit_reg\" value=\"submit_reg\" />
</form>";
===================
и ПЕРЕД ним вставляем
===================
<input name=\"quest_id\" type=\"hidden\" id=\"quest_id\" value=\"{$quest['id']}\" />
======
еще ищем (после добавления предыдущих пунктов примерно 435-я строка):
======
$email = $db->safesql(trim( str_replace( $not_allow_symbol, '', strip_tags( stripslashes( $user_arr[1] ) ) ) ) );
======
ниже добавляем:
======
//reg_quest
$quest_id = trim( $db->safesql( $parse->process($user_arr[4] ) ) );
$reg_quest = trim( $db->safesql( $parse->process( $user_arr[5] ) ) );
//reg_quest
=====
и еще чуть ниже ищем (после добавления предыдущих пунктов примерно 444-я строка):
=====
$reg_error = check_reg( $name, $email, $regpassword, $regpassword );
=====
и меняем на
=====
$reg_error = check_reg( $reg_quest, $quest_id, $name, $email, $regpassword, $regpassword );
=====

воот... с файлом register.php покончили!))



****пункт 3
теперь открываем templates/Ваш шаблон/registration.tpl
и вставляем после [/recaptcha] и до [/registration] примерно следующее(но в стиле вашего дизайна):
===============================
<tr>
<td width="130" height="25">{quest}:</td>
<td><input type="text" name="reg_quest" id='reg_quest' style="width:165px" class="f_input" /> </td>
</tr>
===============================


фуух... вроде все! кому пригодилось юзайте!! и помните dle.in.ua и dlepro.com)